iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0

特色

Polars是近年興起的Python資料處理工具,可以視為新世代的Pandas,其特色可從「快好省」三個面向來理解。

快在哪?

  • 以Rust編寫而成,支援平行運算,雖然可使用NVIDIA GPU,但在一般單機上已有不錯的效能。
  • 非常注重I/O速度,支援本地、雲端或是資料庫存取。

好在哪?

  • 以context表達query的意圖,並以expression表達query的細節。在這樣的設計下,即使是相當複雜的query,也能夠使用其Fluent API輕鬆建構。
  • 提供擴展功能,可以讓使用者定義客製化命名空間。如果熟悉Rust的話,更可以自己編寫客製化的expression。

省在哪?

  • 嚴格型別定義,讓使用者可以自行指定最適合的型別,避免無謂記憶體消耗。
  • 支援Apache Arrow,當讀取arrow格式的資料時,基本上是zero-copy operation。
  • 使用lazy模式時會對query進行最佳化,僅讀取所需要的資料。因此即使所需讀入的資料大於本機記憶體,仍有很高的機會能正常執行。

目標受眾

本系列文的目標受眾為(註1):

  • 對於Python有基本了解,但沒有使用過類似資料處理工具的朋友。
  • 熟練使用Pandas,但也想趁機了解Polars的朋友。

為了同時滿足兩種受眾,本系列文的Polars基本介紹([Day02]~[Day19]),會先以第一類朋友為主。但在每日最後,針對第二類朋友,可能會有一個codepanda小節,聊聊在Pandas中相對應的操作及相關注意事項。

名詞、簡稱及約定

以下定義本系列文所用到的相關詞彙及慣用寫法。

  • 稱呼pandas為Pandas,Polars為Polars,Great Tables為Great Tables或gt,R語言的gt為{gt}及Plotnine為Plotnine或p9。

  • 導入Pandas時,以pd做為該模組縮寫;而在導入Polars時,以pl做為該模組縮寫。

  • 在工作環境中呈現的series與dataframe,無論來自Pandas或Polars,都偏向美觀卻不適合出現在文章中,因此本系列文會以print()後的型式來呈現。

  • 橫為行(row),直為列(column)。

  • Series:

    • pl.Series代稱Polars的Series型別。
    • 在形容pl.Series所使用的屬性或函數時,會使用pl.Series.xxx型式。
    • 在文中提到pl.Series的instance時,會使用Polars series或直接簡稱為series。
    • pd.Series代稱Pandas的Series型別。
    • 在形容pd.Series所使用的屬性或函數時,會使用pd.Series.xxx型式。
    • 在文中提到pd.Series的instance時,會使用Pandas series。
  • DataFrame

    • pl.DataFrame代稱Polars的DataFrame型別。
    • 在形容pl.DataFrame所使用的屬性或函數時,會使用pl.DataFrame.xxx型式。
    • 在文中提到pl.DataFrame的instance時,會使用Polars dataFrame或直接簡稱為dataframe。
    • pd.DataFrame代稱Pandas的DataFrame型別。
    • 在形容pd.DataFrame所使用的屬性或函數時,會使用pd.DataFrame.xxx型式。
    • 在文中提到pd.DataFrame的instance時,會使用Pandas dataframe。
  • Expression

    • pl.Expr代稱Polars的Expression型別。
    • 在文中提到pl.Expr的instance時,會使用Polars expression、expression或直接簡稱為expr。
  • Null

    • pl.Null代稱Polars的Null型別。
    • 在文中提到pl.Null的instance時,會使用Polars null或直接簡稱為null。
  • 形容callable時,會加上括號,例如pl.Series.set_sorted()。而形容屬性時,不會加上括號,例如pl.Series.flags

  • 假設有一個函數func如下:

    def func(a): ...
    

    嚴格地說,「"a"」是func的parameter,而當我們將值指定給「"a"」來呼叫func時,該值稱為argument。但是現在兩者混用的情況已經相當常見,所以本系列文會使用a=來同時形容parameter及argument兩種情況。

很重要,所以再講一次:

與您約定,在本系列文中看到如:series、dataframe、expr及null等名詞時,皆暗指其來自Polars。如果想表達該名詞來自其它如Pandas的模組時,會特別加上模組名,例如Pandas series或Pandas dataframe等。

各日大綱

各日大綱如下:

  • [Day01] - 緣起
  • [Day02] - 行前準備
  • [Day03] - Polars帶來了什麼便利
  • [Day04] - pl.Series與pl.DataFrame
  • [Day05] - pl.col
  • [Day06] - pl.Expr與selectors
  • [Day07] - 多種基本型別及缺失值處理
  • [Day08] - Datatype:String
  • [Day09] - Datatype:Container
  • [Day10] - Context:DataFrame.select() 與 DataFrame.with_columns()
  • [Day11] - Context:DataFrame.filter()
  • [Day12] - Context:DataFrame.group_by()
  • [Day13] - Datatype:Temporal
  • [Day14] - Datatype:pl.Enum與pl.Categorical
  • [Day15] - 排序
  • [Day16] - DataFrame.pivot()、unpivot()及unstack()
  • [Day17] - DataFrame.join()
  • [Day18] - 進階操作分享
  • [Day19] - Lazy模式
  • [Day20] - 歷年溫度變化資料處理
  • [Day21] - 使用Matplotlib搭配Polars複刻歷年溫度變化圖
  • [Day22] - 使用Plotnine搭配Polars複刻歷年溫度變化圖
  • [Day23] - 使用Plotnine搭配Polars複刻各國關稅表
  • [Day24] - 使用Great Tables搭配Polars複刻各國關稅表
  • [Day25] - 客製化命名空間
  • [Day26] - Turtle Island套件介紹(1)
  • [Day27] - Turtle Island套件介紹(2)
  • [Day28] - 體驗Polars cloud
  • [Day29] - 簡介marimo
  • [Day30] - 結語

備註

註1:由於Polars是由Rust所寫成,所以在編譯後可以在多種語言中被呼叫,Python只是其中之一,也是本系列文所要學習的。

註2:本系列文中多數範例大多來自Polars教學文件API文件

註3:關於[Day20]~[Day22],改寫自Matt Harrison所著的Effective Visualization。該書以Pandas搭配Matplotlib,講解如何繪製數種實用圖片,而小弟有幸受邀成為該書之一的審稿者。在此工作完成後,經Matt同意將Alta Ski Resort範例,改寫為此三天的內容。

註4:Great TablesPlotnine都是Posit大力支持的開源專案,分別對應R語言中的{gt}{ggplot2}

註5:Turtle Island為小弟編寫的套件,目的是希望能專注地編寫expression,而非處理相關的boilerplate code。


下一篇
[Day02] - 行前準備
系列文
Polars熊霸天下8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言